home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Add-On
/
Workbench Add-On - Volume 1.iso
/
Dev
/
Oberon
/
texts
/
InternalData.txt
< prev
next >
Wrap
Text File
|
1995-07-02
|
6KB
|
153 lines
$RCSfile: InternalData.txt $
Description: Description of internal data structures used by the compiler
Created by: fjc (Frank Copeland)
$Revision: 1.4 $
$Author: fjc $
$Date: 1995/01/26 00:06:47 $
Copyright © 1994, Frank Copeland.
This file is part of Oberon-A.
See Oberon-A.doc for conditions of use and distribution.
________________________________________________________________________
[WARNING: this document has not been kept properly up to date]
INTRODUCTION
This document describes the internal data structures used by the
Oberon-A compiler. It should be read with reference to section 12.3 of
Project Oberon (1). This document presents the modifications made in
porting the compiler from the NS32x32 processors to the MC68000.
OBJECT AND ITEM MODES
Object modes - basic modes of declared identifiers.
Var Variable (global and local variable, value parameters)
Ind Indirect (variable parameters)
Con Constant
Fld Record field
Typ User defined and basic types
LProc Local procedure
XProc Exportable procedure
SProc Standard procedure
LibCall Amiga library function definition
IProc Interrupt handler procedure
Mod Module
Head Head of list of objects
Item modes - non-basic modes generated in expressions.
Reg direct register mode (intermediate result in expression)
RegI indirect register mode (dereferencing pointers, variable
parameters)
RegX indirect, indexed register mode (access to array element in
expression)
Stk stack mode (procedure parameters, saved registers)
Coc condition code mode (evaluation of boolean expressions (?))
Abs absolute mode (?)
DATA STRUCTURE ALIASES
The Object, Item and Struct types used in the symbol table are actually
variant records. For the sake of simplicity and portability (and
because the Oberon language does not have variant record types) these
types have a number of anonymous fields that are interpreted according
to the mode or form field of the record.
Table 12.2 (modified)
--------+------------------+-----------------------------
| Objects | Items
mode | a0 a1 a2 | lev a0 a1 a2 obj
--------+------------------+-----------------------------
Var | adr rcvr | lev adr
VarX | | lev adr RX
VarR | R | lev R
Ind | adr rcvr | lev adr off
IndX | | lev adr off RX
IndR | R | lev R
Con | val val | val val
| sadr leng mno | mno sadr leng char (strings)
RegI | | R off
RegX | | R off RX
Lab | | off size
LabI | | off size
Push | | R
Pop | | R
Coc | | CC Tjmp Fjmp
Brnch | |
Reg | | R
Fld | off | off obj
Typ | | mno tadr obj
LProc | pno | lev pno obj
XProc | | mno obj
TProc | pno tlev lnk | mno pno tlev super obj
SProc | fno | fno
Mod | mno key | mno obj
Head | lev psize |
LibCall | foff | mno foff obj
LibCall2| adr foff | mno adr foff
--------+----------------------
| Objects
mode | left right link
--------+----------------------
Var | next
VarX | next
VarR | next
Ind | next
IndX | next
IndR | next
LProc | pars
XProc | pars
TProc | next pars
Head | next vars objects
LibCall | next pars
LibCall2| next pars
Fld | next
-------------------------------------------------
Structures
form BaseTyp link mno n adr
-------------------------------------------------
Pointer PBaseTyp descno
ProcTyp ResTyp param
Array ElemTyp mno nofel
DynArr ElemTyp
Record BaseTyp fields mno tlev descno
Explanation of field names
adr - base address of object
lev - lexical level of declaration
obj - back pointer to object structure for item
off - offset from base address or register
RX - register number of index register
R - register number
val - value of constant (longreals use both a0 and a1, others only a0)
sadr - base address of string constant
leng - length of string constant
CC - condition code number
Tjmp - address of code executed if expression result is TRUE
Fjmp - address of code executed if expression result is FALSE
mno - module number
tadr - address of record type descriptor (?)
pars - list of procedure parameters
pno - procedure number
Ladr - address of procedure code
fno - standard procedure number
psize - no idea :-)
PBaseTyp - pointer base type
ResTyp - procedure result type
param - list of procedure parameters
ElemTyp - array element type
nofel - number of elements in array
bounds - address of array bounds constant
BaseTyp - record base type
fields - list of record fields
descno - record type descripter number
foff - library vector offset of function
size - size of reference: 1 - byte, 2 = word, 4 = long
tlev - inheritance level of record type